package com.clp.protocol.iec104.iec104.client;
import com.clp.protocol.core.async.NettyAsyncSupport;
import com.clp.protocol.iec104.iec104.client.state.MasterStateInfo;
import com.clp.util.event.EventListenerRegister;

/**
 * 主站，继承连接信息，同时可以发送和接收Apdu
 */
public interface Master extends MasterInfo {
    NettyAsyncSupport getAsyncSupport();

    /**
     * 是否已连接
     * @return
     */
    boolean isConnected();

    /**
     * 当前发送序号
     * @return
     */
    int sendSeq();

    /**
     * 当前接收序号
     * @return
     */
    int recvSeq();

    /**
     * 当前已经接收到未发送S帧确认的I帧数
     * @return
     */
    int currRecvCount();

    /**
     * 是否自动启动传输激活
     * @return
     */
    boolean isAutoStartDtV();

    int maxReconnectCount();

    /**
     * 获取主站状态信息
     * @return
     */
    MasterStateInfo stateInfo();

    EventListenerRegister<Master> getEventListenerRegister();

    MasterApduSender getApduSender();

    MasterApduRecver getApduRecver();
}
